package orbito.simulation;

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;

import orbito.GameController;
import orbito.graphics.Viewport;

public interface Simulator {
	void init();
	void step();
	void renderInfo(Graphics2D g, Viewport v, AffineTransform tx, double t, double dt);
	
	void increaseTimeCompression();
	void decreaseTimeCompression();
	void resetTimeCompression();
	double getTimeCompression();
	
	double getTime();
	double getTimeStep();
	long getStepCount();
	double getAccumulatorRatio();
	
	void setDtDownLock(boolean b);
	boolean isDtDownLock();
	void setDtUpLock(boolean b);
	boolean isDtUpLock();
	boolean isRunningRealTime();
	
	boolean isRunning();
	boolean isPaused();
	boolean isResetting();
	boolean hasTerminated();
	
	void start();
	void pause();
	void reset();
	void terminate();
	
	void setGameController(GameController game);
}
